package com.qf.java2106.zhangsan.hotel.entity;

import com.alibaba.druid.util.StringUtils;

import java.io.IOException;
import java.sql.Struct;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/**
 * @author ghy
 * @version 1.0
 * @date 2021-10-25
 **/
public class BeanFactory {

    private static Map<String, Object> ioc = new HashMap<>();

    //创建一个有序的Properties对象
    private static final Properties PROPERTIES = new OrderedProperties();

    /**
     * 读取配置文件，创建对象放入到map中
     *  key : foodTypeDao
     *  value : FoodTypeDaoImpl的对象
     */
    static {
        try {
            PROPERTIES.load(BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"));
            // 读取出来配置文件中的key是没有顺序的。
            // 所以要让读取的顺序是按从上到下的顺序，也就是先创建Dao，再创建Service
            Set<String> beanNames = PROPERTIES.stringPropertyNames();
            for (String beanName : beanNames) {
                String className = PROPERTIES.getProperty(beanName);
                Class<?> clazz = Class.forName(className);
                if(null != clazz) {
                    Object bean = clazz.newInstance();
                    ioc.put(beanName, bean);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 从map中根据key获取value，value就是对象。
     *  dao,service都是单例的，可以节省性能
     * @param beanName
     * @return
     */
    public static Object getBean(String beanName){
        return ioc.get(beanName);
    }

    public static void main(String[] args) {
        BeanFactory factory = new BeanFactory();
    }

}
